package com.zzptc.zzsgz.bdsjws.utils;

import android.app.Notification;
import android.app.NotificationManager;
import android.content.ContentProvider;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Environment;
import android.provider.ContactsContract;
import android.support.v4.app.NotificationCompat;

import com.zzptc.zzsgz.bdsjws.MyApplication;
import com.zzptc.zzsgz.bdsjws.R;
import com.zzptc.zzsgz.bdsjws.com.Constants;
import com.zzptc.zzsgz.bdsjws.db.MobileInfoDao;
import com.zzptc.zzsgz.bdsjws.vo.Contact;
import com.zzptc.zzsgz.bdsjws.vo.MobileInfo;

import org.apache.commons.io.FileUtils;

import java.io.File;
import java.net.URL;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * Created by zzsgz on 2017/4/23.
 */
//普通JAVA类，是没有上下文
public class MyUtil {
    //返回共享首选项对象
    public static SharedPreferences getSharedPre(){
         //获取上下文  再获取共享首选项
        return  MyApplication.getContext().getSharedPreferences("loginnew", Context.MODE_PRIVATE);
    }
//首先判断判断是否存在SD卡
    public static boolean isSD(){
        boolean flag=Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
        if(flag){
            return true;
        }else {
            return false;
        }
    }

    // 得到文件存储路径
    public static File getDir(){
       if(isSD()) {
           return Environment.getExternalStorageDirectory();
       }else {
          return Environment.getDownloadCacheDirectory();
          // return Environment.getExternalStorageDirectory();
       }
    }

//得到用于安装 的Intent
    public static Intent getInstallIntent(File file){
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setDataAndType(Uri.fromFile(file),
                "application/vnd.android.package-archive");

       return intent;


    }
//求日期差
    public static int daysBetween(Date smdate, Date bdate) throws ParseException
    {
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        smdate=sdf.parse(sdf.format(smdate));
        bdate=sdf.parse(sdf.format(bdate));
        Calendar cal = Calendar.getInstance();
        cal.setTime(smdate);
        long time1 = cal.getTimeInMillis();
        cal.setTime(bdate);
        long time2 = cal.getTimeInMillis();
        long between_days=(time2-time1)/(1000*3600*24);

        return Integer.parseInt(String.valueOf(between_days));
    }
    public static int getVersionCode(Context context)//获取版本号(内部识别号)
    {
        try {
            PackageInfo pi=context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
            return pi.versionCode;
        } catch (PackageManager.NameNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return 0;
        }
    }
//复制文件到手机
    public static void copyFileToMobile(Context context,String fromdbname,String todbname)throws Exception{
       // MyApplication.getContext().getPackageName();
      //原始文件的位置
         URL url=context.getClass().getClassLoader().getResource("assets/"+fromdbname);
                //目的地文件夹路径
        String dbfiledir="/data/data/"+MyApplication.getContext().getPackageName()+"/databases";

        File fileMobiledir=new File(dbfiledir);
        if(!fileMobiledir.exists()){
            fileMobiledir.mkdir();
        }

        File dbfileMobile =new File(fileMobiledir+"/"+todbname);
        if(!dbfileMobile.exists()){
            dbfileMobile.createNewFile();
        }
//第一个参数 是包含路径源文件    第二个参数 目的地包含路径的文件
        FileUtils.copyURLToFile(url,dbfileMobile);

    }

    /**
     * 得到手机上的联系人信息
     * id 姓名  电话号码  手机归属地    三个属性封装成一个实体类   vo pojo entity  放入集合中
     * @return
     */
  public static List<Contact> getAllContacts(){
     List<Contact> lists=new ArrayList<Contact>();
      //通过内容提供者查询联系人
//      访问联系人的uri：
//      ContactsContract.Contacts.CONTENT_URI
//      访问电话号码的uri：
//      ContactsContract.CommonDataKinds.Phone.CONTENT_URI
      ContentResolver contentResolver=MyApplication.getContext().getContentResolver();
      Cursor cursor=contentResolver.query(ContactsContract.Contacts.CONTENT_URI,null,null,null,null);
      if(cursor!=null){
          while (cursor.moveToNext()){

              int id=cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts._ID));//
              String name=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));//手机联系人
              int num=cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
              String phonenum=null;
              //如果大于0，表示有电话号码
              if(num>0){
                  phonenum=getPhonenumByID(id);
              }
              //获取手机归属地？？？
              //准备工作：将外部数据库拷贝到手机中的方法  1、在哪调用方法 MyAppication  2使用greendao框架来调用外部数据库
                String addr=null;
              addr=getAddressByTel(phonenum);


              Contact contact=new Contact(id,name,phonenum,addr);
              lists.add(contact);
          }
          cursor.close();
      }
      return lists;
  }
    //正则表达式
    public static String getAddressByTel(String tel){
       String address=null;
        //String[] aa=tel.split(" ");
        String newtel=tel.replace(" ","").replace("-","");
        String telnum=null;
        if(newtel.length()==11&&newtel.matches("^1[3578]\\d{9}$")){
            //手机号码
            telnum=newtel.substring(0,7);
           address=  getMobileAddrByTel(telnum);

        }else{
            //座机号码?  3+7   3+8  4+7  4+8
            int length=newtel.length();
            switch (length){
                case 10:
                   getZUOJIAddrByTel(newtel,3);
                    break;
                case 11:
                    //分两种情况    3+8  4+7
                    address=getZUOJIAddrByTel(newtel,3);
                    if(address==null){
                        address=getZUOJIAddrByTel(newtel,4);
                    }
                    break;
                case 12:
                    address=getZUOJIAddrByTel(newtel,4);
                    break;
                default:
                    address="未知";
            }

        }

        return address;
    }
public static String getZUOJIAddrByTel(String tel,int length){
  MobileInfo  mobileInfo=MyApplication.getMobiledaoSession().getMobileInfoDao().queryBuilder()
            .where(MobileInfoDao.Properties.AreaCode.eq(tel.substring(0,length))).limit(1).distinct().unique();
    return mobileInfo.getMobileArea();
}

    public static String getMobileAddrByTel(String tel){
        MobileInfo mobileInfo= MyApplication.getMobiledaoSession().getMobileInfoDao().queryBuilder()
                .where(MobileInfoDao.Properties.MobileNumber.eq(tel)).distinct().unique();
        return mobileInfo.getMobileArea();
    }
    /**
     * 根据ID查询手机号码
     * @param id
     * @return    new Int[]{1,2,3}
     */
   public static  String getPhonenumByID(int id){
       String telnum=null;
       ContentResolver contentResolver=MyApplication.getContext().getContentResolver();
      Cursor cursor= contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
              new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER},
               ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"=?",new String[]{id+""},null);
       if(cursor!=null){
          //我这只取一个电话号码
           if(cursor.moveToNext()){
               telnum=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
           }
       }
       cursor.close();

       return telnum;
   }

}
